前の手順では、リソースファイルを追加し、アプリケーションへのコードの追加を開始しました。この手順では、残りのアプリケーションコードを追加します。
C# コードの書き方
| C# |
コードのコピー
|
|---|---|
#region event handlers
void Printing_Unloaded(object sender, RoutedEventArgs e)
{
UnregisterForPrinting();
}
void Printing_Loaded(object sender, RoutedEventArgs e)
{
// 印刷を初期化します
RegisterForPrinting();
}
private async void btnPrint_Click(object sender, RoutedEventArgs e)
{
await Windows.Graphics.Printing.PrintManager.ShowPrintUIAsync();
}
#endregion
|
|
| C# |
コードのコピー
|
|---|---|
#region implemention #endregion |
|
C# コードの書き方
| C# |
コードのコピー
|
|---|---|
/// <summary>
/// これは、PrintManager.PrintTaskRequested のイベントハンドラです。
/// </summary>
/// <param name="sender">PrintManager</param>
/// <param name="e">PrintTaskRequestedEventArgs </param>
protected void PrintTaskRequested(PrintManager sender, PrintTaskRequestedEventArgs e)
{
PrintTask printTask = null;
printTask = e.Request.CreatePrintTask("SamplePDF", sourceRequested =>
{
// 印刷ジョブが完了すると、印刷タスクのイベントハンドラが呼び出されます。
printTask.Completed += async (s, args) =>
{
// 印刷操作が失敗したらユーザーに通知します。
if (args.Completion == PrintTaskCompletion.Failed)
{
await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
{
MessageDialog dialog = new MessageDialog("Failed to print.");
dialog.ShowAsync();
});
}
};
|
|
C# コードの書き方
| C# |
コードのコピー
|
|---|---|
// 用紙サイズや用紙方向などの印刷オプションを設定します
Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
{
var layout = rtb.ViewManager.PresenterInfo as C1PageLayout;
if (layout != null && layout.Width > layout.Height)
{
printTask.Options.Orientation = PrintOrientation.Landscape;
}
});
sourceRequested.SetSource(printDocumentSource);
});
}
|
|
C# コードの書き方
| C# |
コードのコピー
|
|---|---|
/// <summary>
/// このメソッドは、印刷用アプリケーションを Windows に登録し、印刷プロセスに必要なイベントハンドラを設定します。
/// </summary>
protected void RegisterForPrinting()
{
// PrintDocument を作成します。
printDocument = new PrintDocument();
// DocumentSource を保存します。
printDocumentSource = printDocument.DocumentSource;
// 印刷プレビューを設定するイベントハンドラを追加します。
printDocument.Paginate += Paginate;
// 指定されたプレビューページを提供するイベントハンドラを追加します。
printDocument.GetPreviewPage += GetPrintPreviewPage;
// すべての最終印刷ページを提供するイベントハンドラを追加します。
printDocument.AddPages += AddPrintPages;
// PrintManager を作成し、印刷初期化のハンドラを追加します。
PrintManager printMan = PrintManager.GetForCurrentView();
printMan.PrintTaskRequested += PrintTaskRequested;
}
|
|
C# コードの書き方
| C# |
コードのコピー
|
|---|---|
/// <summary>
/// このメソッドは、印刷用アプリケーションの Windows への登録を解除します。
/// </summary>
protected void UnregisterForPrinting()
{
if (printDocument == null)
return;
printDocument.Paginate -= Paginate;
printDocument.GetPreviewPage -= GetPrintPreviewPage;
printDocument.AddPages -= AddPrintPages;
// 印刷初期化のハンドラを削除します。
PrintManager printMan = PrintManager.GetForCurrentView();
printMan.PrintTaskRequested -= PrintTaskRequested;
}
|
|
C# コードの書き方
| C# |
コードのコピー
|
|---|---|
/// <summary>
/// これは、PrintDocument.Paginate のイベントハンドラです。
/// PrintManager が印刷プレビューを要求すると起動します
/// </summary>
/// <param name="sender">PrintDocument</param>
/// <param name="e">Paginate Event Arguments</param>
protected void Paginate(object sender, PaginateEventArgs e)
{
pages.Clear();
viewManager = new C1RichTextViewManager
{
Document = rtb.Document,
PresenterInfo = rtb.ViewManager.PresenterInfo
};
PrintDocument printDoc = (PrintDocument)sender;
// プレビューページ数を報告します
printDoc.SetPreviewPageCount(rtb.ViewManager.Presenters.Count, PreviewPageCountType.Intermediate);
}
/// <summary>
/// これは、PrintDocument.GetPrintPreviewPage のイベントハンドラです。特定の印刷プレビューページを
/// UIElement の形式で PrintDocument のインスタンスに提供します。次に PrintDocument は、この UIElement を
/// Windows 印刷システムが処理できるページに変換します。
/// </summary>
/// <param name="sender">PrintDocument</param>
/// <param name="e">プレビュー要求されたページを含む引数</param>
protected void GetPrintPreviewPage(object sender, GetPreviewPageEventArgs e)
{
// 最初のページを追加します
if (e.PageNumber == 1)
AddOnePrintPreviewPage(0);
PrintDocument printDoc = (PrintDocument)sender;
printDoc.SetPreviewPage(e.PageNumber, pages[e.PageNumber - 1]);
// 他のページを追加します
if (e.PageNumber == 1)
for (int i = 1; i < viewManager.Presenters.Count; i++)
AddOnePrintPreviewPage(i);
}
/// <summary>
/// これは、PrintDocument.AddPages のイベントハンドラです。印刷するすべてのページを
/// UIElement の形式で PrintDocument のインスタンスに提供します。次に PrintDocument は、これらの UIElement を
/// Windows 印刷システムが処理できるページに変換します。
/// </summary>
/// <param name="sender">PrintDocument</param>
/// <param name="e">印刷タスクのオプション参照を含むページ追加イベントの引数</param>
protected void AddPrintPages(object sender, AddPagesEventArgs e)
{
// すべてのページをループし、印刷する各ページを追加します
foreach (FrameworkElement page in pages)
{
printDocument.AddPage(page);
}
PrintDocument printDoc = (PrintDocument)sender;
// すべての印刷ページが準備できたことを示します
printDoc.AddPagesComplete();
}
void AddOnePrintPreviewPage(int index)
{
var page = (FrameworkElement)printTemplate.LoadContent();
page.DataContext = viewManager.Presenters[index];
if (!pages.Contains(page))
pages.Add(page);
}
|
|
この手順では、アプリケーションコードを追加しました。次の手順では、このアプリケーションを実行します。